Many applications can be executed by a single processor at the same time. The processor, however, has a finite amount of resources that different applications must share. These resources include counters, interrupts, etc. The shared resources are typically allocated on some dynamic type basis where a later application can wipe out programming of an already in use shared resource by an earlier application. Thus, the applications are in competition for the shared resources.
In conventional systems, an application looking to use shared resources has to poll each shared resource independently to determine the particular resource's availability. This cumbersome technique can lead to performance penalties such as latency and redundancy. For example, two different applications may poll a resource at about the same time with both independently determining an available condition. Consequently, both applications may try to program the same shared resource leading to an overwrite error for at least one of the applications.
Moreover, the applications, in conventional systems, also have to cross check a separate published errata report to verify that the particular requested resource is operational as well as available. This cross checking can lead to extra processing time and, consequently, slow computing.